using System.Collections.Generic;
using CreditoAutorizado.Dados.Entidades;
using NHibernate;
using NHibernate.Criterion;

namespace CreditoAutorizado.CamadaAcessoDadosNH
{
    public class RepositorioUsuario
    {
        public Usuario Inserir(Usuario usuario)
        {
            GerenciadorBD.Instance.SessaoAtual().Save(usuario);
            return usuario;
        }

        public Usuario Atualizar(Usuario usuario)
        {
            Usuario tmpUsuario = ObterPorId(usuario.UsuarioId);

            tmpUsuario.Bairro = usuario.Bairro;
            tmpUsuario.Celular = usuario.Celular;
            tmpUsuario.Cidade = usuario.Cidade;
            tmpUsuario.Cpf = usuario.Cpf;
            tmpUsuario.DataCadastro = usuario.DataCadastro;
            tmpUsuario.Email = usuario.Email;
            tmpUsuario.Estado = usuario.Estado;
            tmpUsuario.Nome = usuario.Nome;
            tmpUsuario.Numero = usuario.Numero;
            tmpUsuario.Rua = usuario.Rua;
            tmpUsuario.Senha = usuario.Senha;
            tmpUsuario.Telefone = usuario.Telefone;
         
            GerenciadorBD.Instance.SessaoAtual().Update(tmpUsuario);
            return tmpUsuario;
        }

        public void Excluir(Usuario usuario)
        {
            GerenciadorBD.Instance.SessaoAtual().Delete(usuario);
        }

        public IList<Usuario> ObterTodos()
        {
            ICriteria criteria = GerenciadorBD.Instance.SessaoAtual().CreateCriteria(typeof(Usuario));
            return criteria.List<Usuario>() as List<Usuario>;
        }

        public Usuario ObterporEmailESenha(string email, string senha)
        {
            ICriteria criteria = GerenciadorBD.Instance.SessaoAtual().CreateCriteria(typeof (Usuario))
                .Add(Restrictions.Eq("Email", email)).Add(Restrictions.Eq("Senha", senha));

            return criteria.UniqueResult() as Usuario;
        }

        public Usuario ObterPorId(int id)
        {
            return GerenciadorBD.Instance.SessaoAtual().Get<Usuario>(id);
        }
    }
}